const path = require("path");
const CompressionPlugin  = require('compression-webpack-plugin') //版本过高会报错TypeError: Cannot read property 'tapPromise' of undefined
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i; // 开启gzip压缩， 按需写入

const IS_PROD = ["priduction" , "prod"].includes(process.env.NODE_ENV); //正式环境
function reslove(dir) {
    return path.join(__dirname,dir)
}

module.exports = {
    publicPath: process.env.NODE_ENV === 'production' ? './' : '/',
    lintOnSave: false,
    runtimeCompiler: true,
    productionSourceMap: !IS_PROD, //生产环境source map(减少dist文件体积，加速构建)
    parallel:require("os").cpus().length > 1,
    pwa:{},
    devServer: {
        proxy: {
            "/api": {
                target: process.env.VUE_APP_API,
                secure:false,
                changeOrigin: true, //开启代理
                ws:true,
                pathRewrite: {
                    "^/api": "/"
                }
            }
        }
    },
    // 高级配置
    chainWebpack: config =>{
        config.resolve.symlinks(true);  // 修复HMR(热更新)失效
        config.plugins.delete('prefetch')
        config.plugins.delete('preload')
        config.resolve.alias
            .set('@',reslove('src'))
            .set('@components', reslove('src/components'))
            .set('@views', reslove('src/views'))
            .set('@store',reslove('src/store'))

        config.optimization.minimizer('terser').tap((args) =>{
            // 去除生产环境console
            args[0].terserOptions.compress.drop_console = true
            return args
        })

    },
    // 基础配置打包js.css文件，优化加载速度(参考：https://blog.csdn.net/qq_31677507/article/details/102742196)
    configureWebpack: config => {
        if(process.env.NODE_ENV === 'production'){
            // 生产环境修改配置
            return {
                plugins: [new CompressionPlugin({
                    test: productionGzipExtensions,
                    threshold:10240, //超过10kb数据进行压缩
                    deleteOriginalAssets:false,//是否删除源文件
                })],
                performance:{ //生产环境构建文件超出配置带下显示提示
                    hints: 'warning',
                    // 入口起点的最大体积 整数类型（以字节为单位,默认值是：250000 (bytes)）
                    maxEntrypointSize: 5000000,
                    // 生成文件的最大体积 整数类型（以字节为单位,默认值是：250000 (bytes)）
                    maxAssetSize: 3000000

                }
            }
        }else{
            // 开发环境修改配置
        }
    },

}
